package org.abc.manager
{
	import org.abc.interfaces.IDispose;
	import org.abc.interfaces.IExclusion;

	/**
	 * @describe  	这个管理类不是一个单例。
	 * 				主要处理多个显示对象之间的互斥关系
	 * 				如A|B|C三个对象，显示其中一个，其他两个消失。
	 * @author  	Mr.zheng
	 * @website 	http://blog.sina.com.cn/zihua2007
	 * @time		2011-7-11 19:57
	 */
	public class ExclusionManager implements IDispose
	{
		/**
		 * 对象集合
		 */
		private var _itemArr:Array;
		/**
		 * 当前项
		 */
		private var _currItem:IExclusion;

		public function ExclusionManager()
		{
			_itemArr=[];
		}

		/* public function */
		public function registerItem(item:IExclusion):void
		{
			var index:int=_itemArr.indexOf(item);
			if (index == -1)
			{
				_itemArr.push(item);
				item.exeForget();
			}
		}

		public function unregisterItem(item:IExclusion):void
		{
			var index:int=_itemArr.indexOf(item);
			if (index != -1)
			{
				_itemArr.splice(index, 1);
			}
		}

		public function selectedItem(item:IExclusion):void
		{
			if (_currItem != null)
				_currItem.exeForget();
			_currItem=item;
			item.exeSelected();
		}

		public function original():void
		{
			if (_currItem)
				_currItem.exeForget();
		}

		/**
		 * 销毁该管理对象
		 * 被管理对象回归初始状态
		 */
		public function dispose():void
		{
			original();
			_itemArr=null;
			_currItem=null;
		}
	/* private function */
	}

}
